/*
 * OrientationImage.h
 *	Headers for the image functions
 *  Created on: 23 nov. 2009
 *      Authors: Bruno CAUSSIN 				<caussin@ecole.ensicaen.fr>
 *      		 Stéphanie PLEYER			<pleyer@ecole.ensicaen.fr>
 *      		 Charles-Edouard VIDOINE	<vidoine@ecole.ensicaen.fr
 */

#ifndef ORIENTATIONIMAGE_H_
#define ORIENTATIONIMAGE_H_
#define NB_ORIENT 8
#define NB_KMEANS 1000
#define DIMENSION 128
#define NB_CASES 16
#define FILEPATH_MAX_SIZE 100

#include <stdio.h>
#include <stdlib.h>
#include <cv.h>
#include <string.h>
#include <highgui.h>
#include <math.h>
#include <time.h>
#include <libxml/xpath.h>
#include <libxml/parser.h>
#include <dirent.h>

double ** kmeans(int k,double *** iogg,int nbelements,int nbIterations,int nbPatch);
double ** kmeans2(int k,int nbelements,int nbIterations,int nbPatch,char *classes);

/** Fonction prenant  :
    - un tableau d'images integrales correspondant aux orientations des gradients pour une image donnée
    - le centre d'un patch (fenetre dans laquelle on va calculer la somme des normes des orientations des gradients dans chaque sous case)
    - le nombre de pixels de coté pour chaque sous case du patch
    *
    Pour chaque sous case du patch (il y en a 16 = 4x4), on calcule la somme des normes pour chaque orientation puis on normalise.
    On retourne un tableau 16x8 contenant
    - 16 lignes (1 par sous case)
    - 8 colonnes (1 par orientation)
**/
double ** patch(IplImage ** iog, int xcenter, int ycenter, int nbpixels);

/* Prend un patch et retourne un histogramme (de dimension 1D NB_CASES × NB_ORIENT) */
double* patchToHisto(double** patch);

/* Prend une image (enfin, son chemin...) et retourne un tableau de NB_ORIENT images intégrales */
IplImage** integralImgOrient(char* filename);

/* Compare des patches à des mots visuels */
int* compareToVisualWords(char* imagePath, double** kmeans, int nbPatches);

double ** chargerKmeans(char * nomfichier);

void reOrient(double * tab);

#endif /* ORIENTATIONIMAGE_H_ */
